package com.yjy.rspResult;

import com.alibaba.fastjson.JSON;

public class MainTest {

    public static void main(String[] args) {
        Result<UserRsp> result = MainTest.<UserRsp>execute("userReq");
        System.out.println(JSON.toJSONString(result));
    }

    public static class UserRsp {
        private Integer id;
        private String name;

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    /**
     * 描述：请求第三方接口时所有的响应参数固定格式为{'code': '', msg: '', data: {}}，因此响应参数固定Result类，data用泛型表示
     * 调用：调用：Result<UserRsp> result = MainTest.<UserRsp>execute("userReq"); //请求参数-userReq，响应参数-Result<UserRsp>
     * @param request 请求参数
     * @param <T>
     * @return
     */
    public static <T> Result<T> execute(String request) {
        try {
            System.out.println(">>>请求第三方接口 开始，request：{}");
            // 省略请求第三方接口
            System.out.println(">>>请求第三方接口 结束，response：Result<UserRsp>");
            // 模拟响应参数。
            // 注：这种UserRsp业务响应类应该按照某种规则生成，如银行这种都是返回xml字符串（包括公共部分、业务部分），这时候就可以根据request的接口名称去加载对应的响应类
            // 如响应类全类名=固定包路径+接口名+Rsp，然后通过Class.forName(类全类名)加载得到这个类，最后生成对象，并将结果set进去
            UserRsp user = UserRsp.class.newInstance();
            user.setId(1);
            user.setName("TestAA");
            Result<T> result = new Result<T>();
            result.setData((T) user);

            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}